// 为什么需要块级作用域？
// ES5只有全局作用域和函数作用域，没有块级作用域
// 引起下列两个问题：
// 1.内层变量可能会覆盖外层变量
// 2.用来技术的循环变量泄露为全局变量
// var age = 10;
// function fn() {
//     // 因为存在预解析，变量会提升
//     // 打印的是undefined未定义，导致打印不出10，被预解析覆盖了，内层声明的变量覆盖了外层的变量
//     console.log(age);
//     if(false) {
//         var age = 'hello';
//     }
// }
// 使用let避免，内层变量覆盖外层变量
// var age = '外层变量';
// function fn() {
//     // let不存在预解析的变量提升，所以不会覆盖外层变量，
//     // 成功打印出外层变量
//     console.log(age);
//     if(false) {
//         let age = 'hello';
//     }
// }
// fn();

// 计数的循环变量，泄露为全局变量
// for(var i = 0; i < 10; i++) {

// }
// // 打印为10，因为var声明的变量，不受花括号的限制
// console.log(i);
// for(let i = 0; i < 10; i++) {
//     // 每次循环，let声明的i，每次都存储在不同的块级作用域中
// }
// // 因为let声明的变量受花括号的限制是块级作用域，不会泄露变成全局变量，所以i在全局中找不到
// console.log(i); //i is not defined
